/*
 * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under both the BSD-style license (found in the
 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
 * in the COPYING file in the root directory of this source tree).
 * You may select, at your option, one of the above-listed licenses.
 */

#ifndef ZSTD_LAZY_H
#define ZSTD_LAZY_H

#if defined(__cplusplus)
extern "C" {
#endif

#include "zstd_compress_internal.h"

U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip);

void ZSTD_preserveUnsortedMark(
    U32* const table,
    U32 const size,
    U32 const reducerValue); /*! used in ZSTD_reduceIndex(). preemptively increase value of ZSTD_DUBT_UNSORTED_MARK */

size_t ZSTD_compressBlock_btlazy2(ZSTD_matchState_t* ms,
                                  seqStore_t* seqStore,
                                  U32 rep[ZSTD_REP_NUM],
                                  void const* src,
                                  size_t srcSize);
size_t ZSTD_compressBlock_lazy2(ZSTD_matchState_t* ms,
                                seqStore_t* seqStore,
                                U32 rep[ZSTD_REP_NUM],
                                void const* src,
                                size_t srcSize);
size_t ZSTD_compressBlock_lazy(ZSTD_matchState_t* ms,
                               seqStore_t* seqStore,
                               U32 rep[ZSTD_REP_NUM],
                               void const* src,
                               size_t srcSize);
size_t ZSTD_compressBlock_greedy(ZSTD_matchState_t* ms,
                                 seqStore_t* seqStore,
                                 U32 rep[ZSTD_REP_NUM],
                                 void const* src,
                                 size_t srcSize);

size_t ZSTD_compressBlock_btlazy2_dictMatchState(ZSTD_matchState_t* ms,
                                                 seqStore_t* seqStore,
                                                 U32 rep[ZSTD_REP_NUM],
                                                 void const* src,
                                                 size_t srcSize);
size_t ZSTD_compressBlock_lazy2_dictMatchState(ZSTD_matchState_t* ms,
                                               seqStore_t* seqStore,
                                               U32 rep[ZSTD_REP_NUM],
                                               void const* src,
                                               size_t srcSize);
size_t ZSTD_compressBlock_lazy_dictMatchState(ZSTD_matchState_t* ms,
                                              seqStore_t* seqStore,
                                              U32 rep[ZSTD_REP_NUM],
                                              void const* src,
                                              size_t srcSize);
size_t ZSTD_compressBlock_greedy_dictMatchState(ZSTD_matchState_t* ms,
                                                seqStore_t* seqStore,
                                                U32 rep[ZSTD_REP_NUM],
                                                void const* src,
                                                size_t srcSize);

size_t ZSTD_compressBlock_greedy_extDict(ZSTD_matchState_t* ms,
                                         seqStore_t* seqStore,
                                         U32 rep[ZSTD_REP_NUM],
                                         void const* src,
                                         size_t srcSize);
size_t ZSTD_compressBlock_lazy_extDict(ZSTD_matchState_t* ms,
                                       seqStore_t* seqStore,
                                       U32 rep[ZSTD_REP_NUM],
                                       void const* src,
                                       size_t srcSize);
size_t ZSTD_compressBlock_lazy2_extDict(ZSTD_matchState_t* ms,
                                        seqStore_t* seqStore,
                                        U32 rep[ZSTD_REP_NUM],
                                        void const* src,
                                        size_t srcSize);
size_t ZSTD_compressBlock_btlazy2_extDict(ZSTD_matchState_t* ms,
                                          seqStore_t* seqStore,
                                          U32 rep[ZSTD_REP_NUM],
                                          void const* src,
                                          size_t srcSize);

#if defined(__cplusplus)
}
#endif

#endif /* ZSTD_LAZY_H */
